package dao;


import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import daosbd.DaoGenericoJPA;

import excecoes.ChaveJaExisteException;
import excecoes.DAOException;

import allaboutmybook.Resenha;

public class DAOConcretoResenhas extends DaoGenericoJPA<Resenha> implements DAOResenhas 
{
	
	public DAOConcretoResenhas()
	{
		
	}
	
	
	public LinkedList<Resenha> pegarTodasAsResenhas() throws DAOException
	{
		try
		{
			@SuppressWarnings("unchecked")
			List<Resenha> todasAsResenhas = this.encontrarTodos();
			Iterator<Resenha> iterador = todasAsResenhas.iterator();
			LinkedList<Resenha> linkedListTodasAsResenhas = new LinkedList<Resenha>();
			while(iterador.hasNext() == true)
			{
				Resenha umaResenha = iterador.next();
				linkedListTodasAsResenhas.add(umaResenha);
			}
			
			return linkedListTodasAsResenhas;
		}
		catch(DAOException e)
		{
			throw new DAOException(e);
		}
	}
	
	public Resenha getResenha(String titulo) throws DAOException
	{
		try
		{
			return this.encontrarPorId(titulo);
		}
		catch(DAOException e)
		{
			throw new DAOException(e);
		}
	}
	
	public void adicionarNovaResenha(Resenha novaResenha) throws ChaveJaExisteException, DAOException
	{
		try
		{
			String tituloResenha = novaResenha.getTitulo();
			
			Resenha resenhaComTituloDaNovaResenha = this.encontrarPorId(tituloResenha);
			
			if(resenhaComTituloDaNovaResenha != null)
			{
				throw new ChaveJaExisteException();
			}
			else
			{
				
				this.adicionarEntidade(novaResenha);
			}
		}
		catch(DAOException e)
		{
			throw new DAOException(e);
		}
		
			
	}
	
	public void removerResenha(String nomeResenha) throws DAOException
	{
		try
		{	
			this.removerEntidade(nomeResenha);
			
		}
		catch(DAOException e)
		{
			throw new DAOException(e);
		}
		
	}


	@Override
	public void editarResenha(String titulo, String nota, String autor,
			String texto) throws DAOException 
	{
		try
		{
			Resenha novaResenha = new Resenha(titulo, nota, autor, texto);
			this.updateEntidade(novaResenha);
		}
		catch(DAOException e)
		{
			throw new DAOException(e);
		}
		
	}
}
